
/*-------------------------------------------------------------------------
 *
 * geo_selfuncs.c
 *	  选择性例程在操作符目录中注册于
 *	  "oprrest" 和 "oprjoin" 属性中。
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *	  src/backend/utils/adt/geo_selfuncs.c
 *
 *	XXX 这些都是完全虚假的。也许某天会有人让它们做
 *	  一些合理的事情。
 *
 *-------------------------------------------------------------------------
 */
#include "postgres.h"

#include "utils/builtins.h"
#include "utils/geo_decls.h"


/*
 * 	几何操作符的选择性函数。这些都是伪的——除非
 * 	我们知道索引中的实际键分布，否则我们无法对这些操作符的
 * 	选择性做出好的预测。
 *
 * 	注意：这里使用的值可能看起来不合理地小。或许它们确实如此。
 * 	现在，我们想确保优化器会利用可用的几何索引，因此选择性
 * 	最好是相对较小的。
 *
 * 	一般而言，GiST 需要搜索多个子树以确保找到了
 * 	同一键的所有出现。由于这一点，估计的扫描索引成本应该
 * 	高于输出选择性所指示的费用。selfuncs.c 中的 gistcostestimate()
 * 	应相应调整——但是在我们能在这里生成一些现实的数字之前，这几乎
 * 	无关紧要......
 */


/*
 * 针对依赖于面积的操作符的选择性，例如“重叠”。
 */

Datum areasel(PG_FUNCTION_ARGS)
{
	PG_RETURN_FLOAT8(0.005);
}

Datum areajoinsel(PG_FUNCTION_ARGS)
{
	PG_RETURN_FLOAT8(0.005);
}

/*
 * 	positionsel
 *
 * 一个 box 严格位于（左侧、右侧、上方、下方）给定 box 的几率有多大？
 */

Datum positionsel(PG_FUNCTION_ARGS)
{
	PG_RETURN_FLOAT8(0.1);
}

Datum positionjoinsel(PG_FUNCTION_ARGS)
{
	PG_RETURN_FLOAT8(0.1);
}

/*
 * 	contsel -- 一个 box 包含（被给定 box 包含）的可能性有多大？
 *
 * 这比“重叠”约束更严格，因此产生的估算应该小于 areasel。
 */

Datum contsel(PG_FUNCTION_ARGS)
{
	PG_RETURN_FLOAT8(0.001);
}

Datum contjoinsel(PG_FUNCTION_ARGS)
{
	PG_RETURN_FLOAT8(0.001);
}
